package agenda;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

public class Arquivos {
	/**
	 * Salva Objetos em Arquivos
	 * @param file
	 * 		Arquivo onde o objeto vai ser salvo
	 * @param objeto
	 * 		Objeto a ser salvo em Arquivo
	 * @throws FileNotFoundException
	 * 		Se o objeto passado for nulo
	 * @throws IOException
	 * 		Se houver algum erro de entrada e saida
	 */
	public static void salvarObjeto(File file, Object objeto)
			throws FileNotFoundException, IOException {

		if (objeto == null) {
			throw new NullPointerException("Objeto passado é nulo");
		}

		FileOutputStream fileOut = null;
		ObjectOutputStream objOut = null;

		try {
			fileOut = new FileOutputStream(file);
			objOut = new ObjectOutputStream(fileOut);
			objOut.writeObject(objeto);

		} catch (FileNotFoundException e) {
			throw new FileNotFoundException("O arquivo não pode ser encontrado");
		} catch (IOException e) {
			throw new IOException("Erro de entrada e saída");
		} finally {
			if (fileOut != null) {
				fileOut.close();
			}

			if (objOut != null) {
				objOut.close();
			}
		}
	}
	/**
	 * Recupera os objetos salvos em Arquivos
	 * @param file
	 * 		Arquivo onde os objetos estão salvos
	 * @return
	 * 		Objeto Recuperado
	 * @throws FileNotFoundException
	 * 		Se o arquivo não for encontrado
	 * @throws IOException
	 * 		Se houver algum erro de saída ou entrada 
	 * @throws ClassNotFoundException
	 * 		Se não conseguir recuperar o objeto
	 */
	public static Object recuperarObjeto(File file)
			throws FileNotFoundException, IOException, ClassNotFoundException {
		Object obj = null;

		if (file == null) {
			throw new NullPointerException("Objeto FILE é Nulo.");
		}

		FileInputStream fileIn = null;
		ObjectInputStream objIn = null;

		try {
			fileIn = new FileInputStream(file);
			objIn = new ObjectInputStream(fileIn);

			obj = objIn.readObject();
		} catch (FileNotFoundException e) {
			throw new FileNotFoundException("Arquivo não encontrado");
		} catch (IOException e) {
			throw new IOException("Erro de entrada e saída");
		} catch (ClassNotFoundException e) {
			throw new ClassNotFoundException(
					"Erro ao recuperar objeto do arquivo");
		} finally {
			if (fileIn != null) {
				fileIn.close();
			}

			if (objIn != null) {
				objIn.close();
			}
		}
		return obj;
	}
}
